#ifndef MATRICEO3_H
#define MATRICEO3_H

/** Fichier définissant une classe représentant les matrices du groupe @f$O( 3,
 * R )@f$.
 *
 * Ce fichier contient la définition de la classe MatriceO3.
 *
 * @file MatriceO3.hpp
 * @author Johan "Solo" Luisier
 *
 * @date 24 Juin 2011
 */

#include "MatriceGL3.hpp"

/** Classe qui implémente les matrices orthogonales de dimension 3.
 *
 * Le groupe @f$O( 3, R )@f$ contient les matrices de transformation
 * laissant la norme des vecteurs invariante, c'est à dire les
 * matrices dont le déterminant est +1 ou -1. La classe MatriceO3
 * implémente de telles matrices.
 *
 * @author Johan "Solo" Luisier
 *
 * @date 24 Juin 2011
 *
 * @class MatriceO3 "MatriceO3.hpp" "Algebre/MatriceO3.hpp"
 */
class MatriceO3 : public MatriceGL3
{
public:
    MatriceO3(const double& scalaire = 1.);
    MatriceO3(const Vecteur& x, const Vecteur& y, const Vecteur& z);
    MatriceO3(const MatriceO3& mat);
    MatriceO3(const MatriceGL3& mat);
    MatriceO3(const Matrice3x3& mat);
    virtual ~MatriceO3();
    MatriceO3& operator=(const Matrice3x3& mat);
private:
    void verifie() const;
};

#endif // MATRICEO3_H
